home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / program / swagn_r.zip / PRINTING.SWG / 0003_LJ-GRAPH.PAS.pas < prev    next >
Pascal/Delphi Source File  |  1993-05-28  |  8KB  |  295 lines

  1. { PW> Does anyone have any code or info on how to Program Graphics on an HP
  2.  PW> Laserjet?
  3.  
  4. --------------<start here >------------
  5. }
  6.  
  7. Unit LJGraph;
  8. {$F+,O+}
  9. Interface
  10.  
  11. Const
  12.   PorTRAIT       =0;
  13.   LandSCAPE      =1;
  14.   GRAYSCALE      =2;
  15.  
  16. Var
  17.   SCRNIMAGE      :Pointer;
  18.   NEGATIVE       :Boolean;
  19.   PROMPTPOS      :Integer;
  20.   GraphDRIVER,GraphMODE:Integer;
  21.  
  22. Procedure PRinTPAUSE(inVERT:Boolean);
  23.  
  24. Implementation
  25.  
  26. Uses Graph,Printer,Crt;
  27.  
  28.   Procedure PROMPTLinE(MSG:String);
  29.   Var
  30.     CHRHT,
  31.     MAXX,
  32.     MAXY           :Integer;
  33.  
  34.  
  35.   begin
  36.     MAXX:=GETMAXX;
  37.     MAXY:=GETMAXY;
  38.     SETCOLor(BLACK);
  39.     SETTextSTYLE(DEFAULTFONT,HorIZDIR,1);
  40.     SETTextJUSTifY(CENTERText,toPText);
  41.     CHRHT:=TextHEIGHT('H');
  42.     PROMPTPOS:=MAXY-(CHRHT+4);
  43.     GETMEM(SCRNIMAGE,IMAGESIZE(0,PROMPTPOS,MAXX,MAXY));
  44.     GETIMAGE(0,PROMPTPOS,MAXX,MAXY,SCRNIMAGE^);
  45.     BAR(0,PROMPTPOS,MAXX,MAXY);
  46.     RECTANGLE(0,PROMPTPOS,MAXX,MAXY);
  47.     OUTTextXY(MAXX div 2,MAXY-(CHRHT+2),MSG);
  48.   end;
  49.  
  50.   Function FMT(MSGPOS:Real):Integer;
  51.   Var
  52.     WIDTH          :Integer;
  53.  
  54.   begin
  55.     WIDTH:=6;
  56.     if(MSGPOS<1000.0)then
  57.       DEC(WIDTH);
  58.     if(MSGPOS<100.0)then
  59.       DEC(WIDTH);
  60.     if(MSGPOS<10.0)then
  61.       DEC(WIDTH);
  62.     FMT:=WIDTH;
  63.   end;
  64.  
  65.   Function SETGRAYSCALE(SCANLinE,GPIXEL:Integer):Integer;
  66.   Var
  67.     GRAY           :Integer;
  68.  
  69.   begin
  70.     GRAY:=0;
  71.     if(GraphDRIVER=CGA) and(GraphMODE<>CGAHI)then
  72.       begin
  73.         Case SCANLinE of
  74.           0:
  75.           begin
  76.               if GPIXEL and 1<>0 then
  77.                 GRAY:=GRAY or 9;
  78.               if GPIXEL and 2<>0 then
  79.                 GRAY:=GRAY or 6;
  80.             end;
  81.           1:
  82.           begin
  83.               if GPIXEL and 1<>0 then
  84.                 GRAY:=GRAY or 4;
  85.               if GPIXEL and 2<>0 then
  86.                 GRAY:=GRAY or 11;
  87.             end;
  88.           2:
  89.           begin
  90.               if GPIXEL and 1<>0 then
  91.                 GRAY:=GRAY or 2;
  92.               if GPIXEL and 2<>0 then
  93.                 GRAY:=GRAY or 13;
  94.             end;
  95.           3:
  96.           begin
  97.               if GPIXEL and 1<>0 then
  98.                 GRAY:=GRAY or 9;
  99.               if GPIXEL and 2<>0 then
  100.                 GRAY:=GRAY or 6;
  101.             end;
  102.         end;
  103.       end
  104.     else
  105.       begin
  106.         Case SCANLinE of
  107.           0:
  108.           begin
  109.               if GPIXEL and 4<>0 then
  110.                 GRAY:=GRAY or 5;
  111.               if GPIXEL and 8<>0 then
  112.                 GRAY:=GRAY or 10;
  113.             end;
  114.           1:
  115.           begin
  116.               if GPIXEL and 1<>0 then
  117.                 GRAY:=GRAY or 2;
  118.               if GPIXEL and 2<>0 then
  119.                 GRAY:=GRAY or 8;
  120.               if GPIXEL and 8<>0 then
  121.                 GRAY:=GRAY or 5;
  122.             end;
  123.           2:
  124.           begin
  125.               if GPIXEL and 4<>0 then
  126.                 GRAY:=GRAY or 5;
  127.               if GPIXEL and 8<>0 then
  128.                 GRAY:=GRAY or 10;
  129.             end;
  130.           3:
  131.           begin
  132.               if GPIXEL and 2<>0 then
  133.                 GRAY:=GRAY or 2;
  134.               if GPIXEL and 8<>0 then
  135.                 GRAY:=GRAY or 5;
  136.             end;
  137.         end;
  138.       end;
  139.     if NEGATIVE then
  140.       GRAY:=GRAY xor $0F;
  141.     SETGRAYSCALE:=GRAY;
  142.   end;
  143.  
  144.   Procedure LJGraphIC(MODE:Integer);
  145.   Const
  146.     ESC            =#$1B;
  147.     GRendS         =ESC+'*rB';
  148.     GRinIT         =ESC+'E'+ESC+'&11H'+ESC+
  149.     '&10'+ESC+'*pOY'+ESC+'*t';
  150.  
  151.   Var
  152.     I,
  153.     J,
  154.     K,
  155.     P,
  156.     Q,
  157.     M,
  158.     MAXX,
  159.     MAXY           :Integer;
  160.     XASP,
  161.     YASP           :Word;
  162.     XPRN,
  163.     YPRN,
  164.     PRSTEP,
  165.     ASPR           :Real;
  166.  
  167.   begin
  168.     PUTIMAGE(0,PROMPTPOS,SCRNIMAGE^,COPYPUT);
  169.     MAXX:=GETMAXX+1;
  170.     MAXY:=GETMAXY+1;
  171.     GETASPECTRATIO(XASP,YASP);
  172.     ASPR:=XASP/YASP;
  173.     SETVIEWPorT(0,0,MAXX,MAXY,False);
  174.     Case MODE of
  175.       PorTRAIT:
  176.       begin
  177.                  XPRN:=690.0;
  178.                  YPRN:=500.0;
  179.                  PRSTEP:=7.2/ASPR;
  180.                  Write(LST,GRinIT,'100R');
  181.                  For J:=0 to MAXY do
  182.                    begin
  183.                      Write(LST,ESC,'&A',
  184.                            XPRN:FMT(XPRN):1,'h',
  185.                            YPRN:FMT(YPRN):1,'V');
  186.                      YPRN:=YPRN+PRSTEP;
  187.                      Write(LST,ESC,'*r1A',ESC,'*b',MAXX div 8,'W');
  188.                      For I:=0 to MAXX div 8 do
  189.                        begin
  190.                          M:=0;
  191.                          For K:=0 to 7 do
  192.                            begin
  193.                              M:=M SHL 1;
  194.                              if GETPIXEL(I*8+K,J)<>0 then
  195.                                inC(M);
  196.                            end;
  197.                          Write(LST,Char(M));
  198.                        end;
  199.                      Write(LST,GRendS);
  200.                    end;
  201.                end;
  202.       LandSCAPE:
  203.       begin
  204.                   XPRN:=1000.0;
  205.                   YPRN:=1000.0;
  206.                   PRSTEP:=9.6*ASPR;
  207.                   Write(LST,GRinIT,'75R');
  208.                   For J:=0 to MAXX-1 do
  209.                     begin
  210.                       Write(LST,ESC,'&a',
  211.                             XPRN:FMT(XPRN):1,'h',
  212.                             YPRN:FMT(YPRN):1,'V');
  213.                       YPRN:=YPRN+PRSTEP;
  214.                       Write(LST,ESC,'*r1A',ESC,'*b',MAXX div 8,'W');
  215.                       For I:=0 to MAXY div 8 do
  216.                         begin
  217.                           M:=0;
  218.                           For K:=0 to 7 do
  219.                             begin
  220.                               M:=M SHL 1;
  221.                               if GETPIXEL(MAXX-J-1,I*8+K)<>0 then
  222.                                 inC(M);
  223.                             end;
  224.                           Write(LST,Char(M));
  225.                         end;
  226.                       Write(LST,GRendS);
  227.                     end;
  228.                 end;
  229.       GRAYSCALE:
  230.       begin
  231.                   XPRN:=1000.0;
  232.                   YPRN:=1000.0;
  233.                   PRSTEP:=2.4*ASPR;
  234.                   Write(LST,GRinIT,'300R');
  235.                   For J:=0 to MAXX do
  236.                     For P:=0 to 3 do
  237.                       begin
  238.                         Write(LST,ESC,'&a',
  239.                               XPRN:FMT(XPRN):1,'h',
  240.                               YPRN:FMT(YPRN):1,'V');
  241.                         YPRN:=YPRN+PRSTEP;
  242.                         Write(LST,ESC,'*r1A',ESC,'*b',MAXY div 2,'W');
  243.                         For I:=0 to MAXY div 2 do
  244.                           begin
  245.                             M:=0;
  246.                             For K:=0 to 1 do
  247.                               begin
  248.                                 M:=M SHL 4;
  249.                                 M:=M or SETGRAYSCALE(P,GETPIXEL(MAXX-J,I*2+K));
  250.                               end;
  251.                             Write(LST,Char(M));
  252.                           end;
  253.                         Write(LST,GRendS);
  254.                       end;
  255.                 end;
  256.     end;
  257.     Write(LST,#$0C,ESC,'&10',ESC,'(8U',ESC,'(sp10h12vsb0T',ESC,'&11H');
  258.   end;
  259.  
  260.  
  261.   Procedure PRinTPAUSE(inVERT:Boolean);
  262.   Var
  263.     CH             :Char;
  264.     doNE           :Boolean;
  265.  
  266.   begin
  267.     DETECTGraph(GraphDRIVER,GraphMODE);
  268.     doNE:=False;
  269.     NEGATIVE:=inVERT;
  270.     While not doNE do
  271.       begin
  272.         PROMPTLinE('PRESS THE <P> KEY to PRinT THIS Graph '+
  273.                    'or ANY OTHER to Exit....');
  274.         While KeyPressed do
  275.           CH:=ReadKey;
  276.         CH:=ReadKey;
  277.         PUTIMAGE(0,PROMPTPOS,SCRNIMAGE,COPYPUT);
  278.         Case UPCase(CH)of
  279.           'P':
  280.           begin
  281.                 LJGraphIC(GRAYSCALE);
  282.                 doNE:=True;
  283.               end;
  284.         else
  285.           doNE:=True;
  286.         end;
  287.         DISPOSE(SCRNIMAGE);
  288.       end;
  289.   end;
  290. end.
  291. {
  292. ---------- stop here --------
  293. So first you init the Graph driver. Next you draw the Graph you want. then
  294. you use printpause afterwards you can close the Graphdriver.
  295. }